package com.dc.base.network;

import com.dc.base.utils.LogX;

import io.reactivex.Observer;
import io.reactivex.disposables.Disposable;

/**
 * @author 冰柠檬dc
 */
public abstract class BaseObserver<T> implements Observer<T> {

    private static final String TAG = "BaseObserver";
    private Disposable disposable;

    @Override
    public void onSubscribe(Disposable d) {
        LogX.i(TAG, "onSubscribe");
        disposable = d;
    }

    @Override
    public void onNext(T t) {
        LogX.i(TAG, "onNext");
        onSuccess(t);
    }

    @Override
    public void onError(Throwable e) {
        LogX.e(TAG, "onError");
        onFailure(e);
    }

    @Override
    public void onComplete() {
        LogX.i(TAG, "onComplete");
        if (disposable != null && !disposable.isDisposed()) {
            disposable.dispose();
        }
    }

    public void release() {
        LogX.i(TAG, "release");
        if (disposable != null && !disposable.isDisposed()) {
            disposable.dispose();
            disposable = null;
        }
    }

    /**
     * 成功
     *
     * @param data T
     */
    public abstract void onSuccess(T data);

    /**
     * 失败
     *
     * @param e Throwable
     */
    public abstract void onFailure(Throwable e);
}
//public abstract class BaseObserver<T> implements Observer<HttpResult<T>> {
//
//    private static final String TAG = "BaseObserver";
//    private Disposable disposable;
//
//    @Override
//    public void onSubscribe(Disposable d) {
//        LogX.i(TAG, "onSubscribe");
//        disposable = d;
//    }
//
//    @Override
//    public void onNext(HttpResult<T> result) {
//        LogX.i(TAG, "onNext");
//        if (result.code == 0 || result.code == 200) {
//            onSuccess(result.data);
//        } else {
//            onFailure(result.code, result.message);
//        }
//    }
//
//    @Override
//    public void onError(Throwable e) {
//        LogX.e(TAG, "onError");
//        onFailure(-100, e.getMessage());
//    }
//
//    @Override
//    public void onComplete() {
//        LogX.i(TAG, "onComplete");
//        if (disposable != null && !disposable.isDisposed()) {
//            disposable.dispose();
//        }
//    }
//
//    public void release() {
//        LogX.i(TAG, "release");
//        if (disposable != null && !disposable.isDisposed()) {
//            disposable.dispose();
//            disposable = null;
//        }
//    }
//
//    /**
//     * 成功
//     *
//     * @param data T
//     */
//    public abstract void onSuccess(T data);
//
//    /**
//     * 失败
//     *
//     * @param error int
//     * @param errorMsg String
//     */
//    public abstract void onFailure(int error, String errorMsg);
//}